import logging   # 日志包
import logging.handlers
import os.path
import time
from config.conf import BASE_DIR,LOG_DIR
import colorlog   # 对日志信息进行颜色划分输出


log_colors_config = {
    'DEBUG': 'white',
    'INFO': 'green',
    'WARNING': 'yellow',
    'ERROR': 'red',
    'CRITICAL': 'bold_red',
}
# 创建日志管理器
log = logging.getLogger('log_name')
# 准备时间字符串,用在log文件名
#daytime = time.strftime('%Y-%m-%d_%H-%M-%S')
daytime = time.strftime('%Y-%m-%d')

# 项目根目录下 的 log 文件夹
# path = BASE_DIR + '/log'
path = LOG_DIR
if not os.path.exists(path):
    os.makedirs(path)
    print("目录已经创建")
    # 目录不存在时创建 目录
# 创建文件日志的路径文件名
filename = path + f'/run_log_{daytime}.log'
    # 命令台 输出对象
# 创建命令台处理器
sh = logging.StreamHandler()
# 创建文件处理器
# when 是 日志分割标志
# interval 一天生成一个
# 日志的数量 控制 30
fh = logging.handlers.TimedRotatingFileHandler(filename, when='midnight', interval=1, backupCount=15,encoding='utf-8')
# 文件日志的格式
fmt = "[%(levelname)s] [%(asctime)s.%(msecs)03d] : %(message)s : %(filename)s -> %(funcName)s line:%(lineno)d"
# 命令台的日志格式
smt = "[%(levelname)s] %(log_color)s [%(asctime)s.%(msecs)03d] : %(message)s : %(filename)s -> %(funcName)s line:%(lineno)d"
    # 日志级别设置, 命令台日志 和 文件日志级别,可以不同,进行单独设置,设置冲突时,谁高以谁为准

# 利用日志格式,生成 文件 和日志格式处理器
file_formatter = logging.Formatter(fmt, datefmt='%Y_%m_%d %H:%M:%S')
console_formattre = colorlog.ColoredFormatter(smt,datefmt='%Y_%m_%d %H:%M:%S',log_colors=log_colors_config)

sh.setFormatter(console_formattre)
fh.setFormatter(file_formatter)

log.setLevel(logging.DEBUG)
fh.setLevel(logging.DEBUG)
sh.setLevel(logging.DEBUG)

# 垃圾回收 ,解决重复日志
if not log.handlers:
    log.addHandler(sh)
    log.addHandler(fh)

sh.close()
fh.close()

if __name__ == '__main__':
    # 初始化系统日志文件
    # init_log_config("aa.log")
    log.debug("我是一个debug级别的日志")
    log.info("我是一个info级别的日志")
    log.error("我是一个error级别的日志")
    log.warning("我是一个warning级别的日志")
    log.critical("我是一个critical级别的日志")
    a = 100
    # 输出变量时候 ，一定要加入 f 。
    logging.info(f"输出变量 a = {a}")